package com.wm.config;

import com.wm.bean.Person;
import com.wm.filter.MyTypeFilter;
import com.wm.service.BookService;
import org.springframework.context.annotation.*;
import org.springframework.core.type.filter.AspectJTypeFilter;
import org.springframework.core.type.filter.RegexPatternTypeFilter;
import org.springframework.stereotype.Controller;
import org.springframework.stereotype.Service;

/**
 * @ClassName: MainConfig
 * @Description: 使用注解注入对象到IOC容器中【以前配置文件的方式被替换成了配置类，即配置类==配置文件】
 * @Author: Deamer
 * @Date: 2022/9/4 21:31
 */
// 这个配置类也是一个组件
@Configuration // 告诉Spring这是一个配置类
/*@ComponentScans(value = {
        @ComponentScan(value = "com.wm", includeFilters = {
                *//*
                 * type：指定你要排除的规则，是按照注解进行排除，还是按照给定的类型进行排除，还是按照正则表达式进行排除，等等
                 * classes：我们需要Spring在扫描时，只包含@Controller注解标注的类
                 *//*
                @ComponentScan.Filter(type = FilterType.ANNOTATION, classes = {Controller.class})
        }, useDefaultFilters = false),// value指定要扫描的包
        @ComponentScan(value = "com.wm", includeFilters = {
                *//*
                 * type：指定你要排除的规则，是按照注解进行排除，还是按照给定的类型进行排除，还是按照正则表达式进行排除，等等
                 * classes：我们需要Spring在扫描时，只包含@Service注解标注的类
                 *//*
                @ComponentScan.Filter(type = FilterType.ANNOTATION, classes = {Service.class})
        }, useDefaultFilters = false)// value指定要扫描的包
})*/
/*@ComponentScan(value = "com.wm", includeFilters = {
        *//*
         * type：指定你要排除的规则，是按照注解进行排除，还是按照给定的类型进行排除，还是按照正则表达式进行排除，等等
         * classes：我们需要Spring在扫描时，只包含@Controller注解标注的类
         *//*
        // 只要是BookService这种类型的组件都会被加载到容器中，不管是它的子类还是什么它的实现类。记住，只要是BookService这种类型的
        @ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, classes = {BookService.class})
}, useDefaultFilters = false)// value指定要扫描的包*/
/*@ComponentScan(value = "com.wm", includeFilters = {
        *//*
         * type：指定你要排除的规则，是按照注解进行排除，还是按照给定的类型进行排除，还是按照正则表达式进行排除，等等
         *//*
        @ComponentScan.Filter(type = FilterType.ASPECTJ, classes = {AspectJTypeFilter.class})
}, useDefaultFilters = false)// value指定要扫描的包*/
/*@ComponentScan(value = "com.wm", includeFilters = {
        *//*
         * type：指定你要排除的规则，是按照注解进行排除，还是按照给定的类型进行排除，还是按照正则表达式进行排除，等等
         *//*
        @ComponentScan.Filter(type = FilterType.REGEX, classes = {RegexPatternTypeFilter.class})
}, useDefaultFilters = false)// value指定要扫描的包*/
@ComponentScan(value = "com.wm", includeFilters = {
        // type：指定你要排除的规则，是按照注解进行排除，还是按照给定的类型进行排除，还是按照正则表达式进行排除，等等
        @ComponentScan.Filter(type = FilterType.CUSTOM, classes = {MyTypeFilter.class})
}, useDefaultFilters = false)// value指定要扫描的包
public class MainConfig {

    // @Bean注解是给IOC容器中注册一个bean，类型自然就是返回值的类型，id默认是用方法名作为id
    @Bean("person")
    public Person person01() {
        return new Person("wm", 27);
    }
}
